package com.多线程.ThreadSafe;

/**
 * 线程安全问题：模拟取钱案例：小明和小红是夫妻，他们有一个共同的账户，余额是十万元，模拟两人同时去取钱
 * 1.定义一个账户类，创建一个账户对象（表示小明和小红的共同账号）
 * 2.定义一个线程类，并把账户对象传给线程
 * 3.在run方法里面实现存钱功能，取钱的功能应该放在账户类里面，因为余额在账户里面 （面向对象思想）
 */

public class ThreadSafeDemo1 {
    public static void main(String[] args) {
        //1.创建一个账户对象，表示小明和小红的共同账户
        Account account=new Account(100000);
        //2.创建两个进程，表示小明和小红同时取钱
        DrawThread thread1=new DrawThread(account,"小明");
        DrawThread thread2=new DrawThread(account,"小红");

        //开始线程
        thread1.start();
        thread2.start();

        //小红来取了100000钱
        //小明来取了100000钱
        //账户余额：0
        //账户余额：-100000
        //小明和小红两个线程是同时执行，可能小明会快一点，或者小红会快一下，但是同时取钱的时候，
        // 在小明或者小红两人一人取完钱，更新余额之前，另一人已经完成了余额是否大于等于要取金额的判断，
        // 所以两个人都能取到100000，所以最后的余额就变为了-100000


    }
}
